package cn.libinal.scloud.base.common.service;

import cn.libinal.scloud.base.common.web.DataPageRequest;
import com.querydsl.core.types.Predicate;
import org.springframework.data.domain.Page;

/**
 * 自定义业务接口
 *
 * @author libinal
 * @param <T> 实体类型
 */
public interface BaseJpaService<T> {
    /**
     * 新增
     *
     * @param source 新增信息
     * @return T
     */
    T create(T source);

    /**
     * 更新
     * @param source 更新信息
     * @return T
     */
    T update(T source);

    /**
     * 根据id查询信息
     * @param id 实体id
     * @return T
     */
    T findById(String id);

    /**
     * 根据id删除
     * @param id 实体id
     */
    void delete(String id);

    /**
     * 分页查询
     *
     * @param source 查询参数
     * @param pageRequest 分页参数
     * @return Page
     */
    Page<T> findByPaging(T source, DataPageRequest pageRequest);

    /**
     * 分页查询
     * @param predicate 查询参数
     * @param pageRequest 分页参数
     * @return Page
     */
    Page<T> findByPaging(Predicate predicate, DataPageRequest pageRequest);
}
